<?php
class PC4_Controlador_Crud_NewslettersEmails extends TICE_Controlador_Crud
{
	public 
		$tabelaEmails;
	
	function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array() ) {
		parent::__construct($request, $response, $invokeArgs);
	}	
		
	public function initModelo(){
		if(empty($this->modelo)){
			$this->modelo = new PC4_Crud_MuitosParaMuitos(array(
				Zend_Db_Table::NAME => 'newsletter_listas',
				'tbCategoria' => 'newsletter_emails',
				'nomeCategoria' => 'email'
			));		
			$this->modeloEmails = new PC4_Crud_NewslettersEmails(array(Zend_Db_Table::NAME => 'newsletter_emails', 'tbCategoria' => 'newsletter_listas', 'tabelaRel' => 'newsletter_listas_rel_newsletter_emails'));		
		}
	}
	
	public function preDispatch(){
		parent::preDispatch();
    	$mClientes = new Pc4_Db_Table('newsletter_clientes');
		if($this->usuario->role != 'master'){
    		$where = 'id = ' . $this->usuario->id_newsletter_clientes;
    	}
    	$rsClientes = $mClientes->getLista($where);
		$clientes = array('' => 'Selecione...');
		foreach($rsClientes as $cliente){
			$clientes[$cliente->id] = $cliente->nome;
		}
		$this->view->campos['id_newsletter_clientes']['categorias'] = $clientes;
	}
	
	
	public function init()
    {
    	$this->campos = array(
    		'id',
    		'id_newsletter_clientes' => array(
    			'cabecalho' => 'Cliente',
	    		'view' => 'categoria' 
	    	),
	    	'nome' => 'Nome da Lista',
	    	'totalCategoria' => array(
	    		'cabecalho' => 'Nº Emails',
	    		'ocultoForm' => true
	    	), 
	    	'cadastrados' => array(
	    		'cabecalho' => 'Exportar Lista',
	    		'view' => 'exportar_csv',
	    		'ocultoForm' => true
	    	),
	    	'novos' => array(
	    		'cabecalho' => 'Adicionar emails',
	    		'view' => 'importar_csv',
	    		'ocultoForm' => true
	    	),
	    	'arquivo' => array(
	    		'cabecalho' => 'Importar Lista de Emails',
	    		'view' => 'arquivo',
	    		'ocultoLista' => true
	    	)
	    );		
    }
	
    public function lista($where = null, $order = null, $count = null, $offset = null){
    	if($this->usuario->role != 'master'){
    		$where = 'nl.id_newsletter_clientes = ' . $this->usuario->id_newsletter_clientes;
    	}
    	parent::lista($where, $order, $count, $offset);
    }
	
	function exportalistaAction(){
		$idLista = $this->_getParam('id');
		$rs = $this->modeloEmails->getLista('nlrne.id_newsletter_listas = ' . $idLista)->toArray();
		$excelUtil = new PC4_Util_Excel();
		$excelUtil->exporta($rs, array(), 'csv');
		$exit;
	}
	
	public function importalistaAction(){
		$this->view->idLista = $this->_getParam('id');
		$this->view->messages = $this->_helper->flashMessenger->getMessages();
	}
	
	public function inserelistaAction(){
		$this->_helper->viewRenderer->setNoRender(true);
		$idLista = $this->_getParam('id');
		$emails = $this->modeloEmails->persisteEmailsRelacionados($idLista);
		
		//formata mensagem de retorno ao usuário
		$inseridos = (count($emails['inseridos']) > 0) ? 'Emails Inseridos com sucesso: <b>' . implode(', ', $emails['inseridos']) .'</b>' : 'Nenhum registro foi inserido'; 
		$naoInseridos = (count($emails['naoInseridos']) > 0) ? 'Os emails: <b>' . implode(', ', $emails['naoInseridos']) . '</b> já existem na base de dados' : 'Registros inseridos com sucesso'; 
		
		$retorno = 	array('inseridos' => $inseridos, 'naoInseridos' => $naoInseridos, 'classe' => 'erro');	
		$this->_helper->flashMessenger($retorno);	
		$this->_redirect('admin/newslettersListaEmails/importalista?id=' . $idLista);
	}
	
    public function getlistasporclienteAction(){
    	$this->_helper->layout()->disableLayout();
    	$this->_helper->viewRenderer->setNoRender(true);
    	
    	//resgata as variaveis passadas
    	$idCliente = $this->_getParam('idCliente');
    	$idEnvio = $this->_getParam('idEnvio');
    	
    	$rsEmails = $this->modeloEmails->getLista('nl.id_newsletter_clientes = ' . $idCliente, 'ne.email ASC');
		$emails = array();
    	foreach($rsEmails as $r){
			$emails[$r->id_newsletter_listas][$r->categoria][$r->email]->nome = $r->email;
    	}

    	//checa se um envio ja foi cadastrado e traz os emails selecionados para esse envio
    	if(!empty($idEnvio)){
	 		$mStatusEnvio = new PC4_Db_Table(array(Zend_Db_Table::NAME => 'newsletter_status_envio', Zend_Db_Table::PRIMARY => 'id_newsletter_envios'));
	    	$rsEmailsSelecionados = $mStatusEnvio->getLista('id_newsletter_envios = ' . $idEnvio);
    		$emailsSelecionados = array();
	    	foreach($rsEmailsSelecionados as $r){
    			$emailsSelecionados[] = $r->email;
    		}
    	}
		
 		$this->view->rsListas = $emails;
	   	$this->view->emailsSelecionados = $emailsSelecionados;
    	
	   	$conteudo = $this->render('/arvoresemails');
    }
       
    public function persisteInsere($registro){
		$id = parent::persisteInsere($registro);
		$this->modeloEmails->persisteEmailsRelacionados($id);
		return $id;
    }
    
    public function persisteEdita($registro, $id){
    	$this->modeloEmails->persisteEmailsRelacionados($id);
    	parent::persisteEdita($registro, $id);
    }

    public function persisteApaga($id){
		$this->modeloEmails->apagaEmailsRelacionados($id);
    	$total = parent::persisteApaga($id);
    	return $total;
    }
    

    public function formAction() {
		parent::formAction();
		$this->view->action .= '&view=json';
	}
	
	public function getDados(&$where = null, $order = null, $count = null, $offset = null) {
		$where = $this->modelo->getSelect($where);
		$where->columns('COUNT(ne.id) as totalCategoria');
		$where->group('nl.id');
		return $this->modelo->getLista($where, $order, $count, $offset);			
	}
}